package com.shujia.exception_;

import org.junit.Test;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class IOExceptionDemo {


    @Test
    public void test2() {
        /*
        对于自动关闭资源的try语句， 可以没有catch和finally——try块可以独自地存在。
        自动关闭资源的try语句，有两个注意点：
        只有放在try后面的圆括号里的资源才会被关闭。
        能被自动关闭的资源必须实现 Closeable 或AutoCloseable接口。
         */
        try (InputStream is = new FileInputStream("d:\\aaa.txt")) {
            int date;
            while ((date = is.read()) != -1) {
                System.out.print((char) date);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void test1() {
        System.out.println(method());
    }

    public boolean method() {
        try {
            System.out.println(1);
            System.out.println(2);
            return true;
        } catch (Exception e) {
            try {
                try {
                    try {

                    } catch (Exception e1) {

                    } finally {

                    }
                } catch (Exception e1) {
                    try {

                    } catch (Exception e2) {

                    } finally {
                        try {

                        } catch (Exception e3) {

                        } finally {

                        }
                    }
                } finally {
                    try {
                        try {
                            try {
                                try {

                                } catch (Exception e1) {

                                } finally {

                                }
                            } catch (Exception e1) {

                            } finally {

                            }
                        } catch (Exception e1) {

                        } finally {

                        }
                    } catch (Exception e1) {

                    } finally {
                        try {

                        } catch (Exception e1) {

                        } finally {

                        }
                    }
                }
            } catch (Exception e1) {

            } finally {

            }
        } finally {
            System.out.println(3);
            // 在finally代码块应该避免使用return
            return false;
        }
    }


    /*
    编译、运行应用程序IOExp.java，体会Java语言中异常的捕获和处理机制。
    相关知识：FileInputStream类的成员方法read()的功能是每次从相应的
    （本地为ASCII码编码格式）文件中读取一个字节，并转换成0~255之间的int型整数返回，到达文件末尾时则返回 -1。

     */
    public static void main(String[] args) {
        InputStream is = null;
        try {
            is = new FileInputStream("d:\\aaa.txt");
            // System.exit(0);

//            int[] arr = new int[3];
//            System.out.println(arr[3]);

            int date;
            while ((date = is.read()) != -1) {
                System.out.print((char) date);
            }
            System.out.println(1 / 0);
        } catch (ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (is != null) {
                    is.close();
                    System.out.println("关闭资源");
                }
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
    }
}
